from IPython.display import display
from IPython.display import HTML
import IPython.core.display as di
# This line will hide code by default when the notebook is exported as HTML
di.display_html(
'<script>jQuery(function() {if (jQuery("body.notebook_app").length == 0) { jQuery(".input_area").toggle(); jQuery(".prompt").toggle();}});</script>', raw=True)
%matplotlib inline
import pandas as pd # for using pandas daraframe
import numpy as np # for som math operations
from sklearn.preprocessing import StandardScaler # for standardizing the Data
from datetime import datetime
import matplotlib.pyplot as plt # for plotting
from scipy import stats
IP= pd.read_excel("IP_data.xlsx",parse_dates=True)
IP_weights= pd.read_excel("IP Weights_1.xlsx",parse_dates=True)
IP = IP[~(IP['Date'] < '1985-12-01')]
IP = IP.set_index('Date')
IP = IP.dropna()
IP = IP.rename(columns={"Euro area": "EA", "United Kingdom": "UK", "United States": "US", "Korea, Rep.":"SK"})
def your_function(ip):
IP_EA = pd.DataFrame(ip)
IP_EA = IP_EA.dropna()
IP_EA.index = pd.to_datetime(IP_EA.index)
IP_EA.iloc[:, 0] = np.log(IP_EA.iloc[:, 0])
IP_EA['C'] = np.arange(len(IP_EA))
IP_EA_Deets =slope, intercept, r_value, p_value, std_err = stats.linregress(IP_EA.iloc[:, 1], IP_EA.iloc[:, 0])
IP_EA_Deets= pd.DataFrame(IP_EA_Deets)
IP_EA_Deets = IP_EA_Deets.T
IP_EA_Deets.columns = ['slope', 'intercept',"r_value", "p_value","std_err"]
IP_EA["trend"] = IP_EA_Deets.iloc[0]['intercept']+(IP_EA_Deets.iloc[0]['slope'] * IP_EA["C"])
IP_EA["Residual"] = IP_EA.iloc[:, 0] - IP_EA.iloc[:, 2]
IP_EA["threeMonth_Shift"] = np.exp(IP_EA.iloc[:, 0]).shift(+3)
IP_EA["threeMonthMA"] = np.exp(IP_EA.iloc[:, 0]).rolling(3).mean()
IP_EA["threeMonth_shift_MA"] = (IP_EA.iloc[:, 4]).rolling(3).mean()
IP_EA["nearly_Momentum"] = (IP_EA.threeMonthMA/IP_EA.threeMonth_shift_MA)
IP_EA["Momentum"] = np.power((IP_EA["nearly_Momentum"]),4)-1
IP_EA = IP_EA.dropna()
return IP_EA_Deets, IP_EA
IP_China_Deets, IP_China = your_function(IP.China)
IP_USA_Deets, IP_USA = your_function(IP.US)
IP_UK_Deets, IP_UK = your_function(IP.UK)
IP_EA_Deets, IP_EA = your_function(IP.EA)
IP_Japan_Deets, IP_Japan = your_function(IP.Japan)
IP_SK_Deets, IP_SK = your_function(IP.SK)
IP_Mexico_Deets, IP_Mexico = your_function(IP.Mexico)
IP_Brazil_Deets, IP_Brazil = your_function(IP.Brazil)
IP_Taiwan_Deets, IP_Taiwan = your_function(IP.Taiwan)
IP_Poland_Deets, IP_Poland = your_function(IP.Poland)
IP_Europe_Deets, IP_Europe = your_function(IP.Europe)
IP_Asia_Deets, IP_Asia = your_function(IP.Asia)
IP_Americas_Deets, IP_Americas = your_function(IP.Americas)
IP_Global_Deets, IP_Global = your_function(IP.Global)
def cells(dataframe, name, second_name):
dataframe_1 = dataframe[['Residual', 'Momentum']].copy()
dataframe_1["Output_Gap"] = dataframe_1["Residual"] /dataframe_1["Residual"].std(ddof=0)
dataframe_1["Momentum"] = (dataframe_1["Momentum"] - dataframe_1["Momentum"].mean())/dataframe_1["Momentum"].std(ddof=0)
return dataframe_1
China = cells(IP_China, "China_Output_Gap", "China_Momentum")
UK = cells(IP_UK, "UK_Output_Gap", "UK_Momentum")
USA = cells(IP_USA, "USA_Output_Gap", "USA_Momentum")
EA = cells(IP_EA, "EA_Output_Gap", "EA_Momentum")
Japan = cells(IP_Japan, "Japan_Output_Gap", "Japan_Momentum")
SK = cells(IP_SK, "SK_Output_Gap", "SK_Momentum")
Mexico = cells(IP_Mexico, "Mexico_Output_Gap", "Mexico_Momentum")
Brazil = cells(IP_Brazil, "Brazil_Output_Gap", "Brazil_Momentum")
Taiwan = cells(IP_Taiwan, "Taiwan_Output_Gap", "Taiwan_Momentum")
Poland = cells(IP_Poland, "Poland_Output_Gap", "Poland_Momentum")
Europe = cells(IP_Europe, "Europe_Output_Gap", "Europe_Momentum")
Asia = cells(IP_Asia, "Asia_Output_Gap", "Asia_Momentum")
Americas = cells(IP_Americas, "Americas_Output_Gap", "Americas_Momentum")
Global = cells(IP_Global, "Global_Output_Gap", "Global_Momentum")
China["Country"] = "China"
UK["Country"] = "UK"
USA["Country"] = "USA"
EA["Country"] = "EA"
Japan["Country"] = "Japan"
SK["Country"] = "SK"
Mexico["Country"] = "Mexico"
Brazil["Country"] = "Brazil"
Taiwan["Country"] = "Taiwan"
Poland["Country"] = "Poland"
Europe["Country"] = "Europe"
Asia["Country"] = "Asia"
Americas["Country"] = "Americas"
Global["Country"] = "Global"
df = China.append(UK)
df = df.append(USA)
df = df.append(EA)
df = df.append(Japan)
df = df.append(SK)
df = df.append(Mexico)
df = df.append(Brazil)
df = df.append(Taiwan)
df = df.append(Poland)
df = df.append(Europe)
df = df.append(Asia)
df = df.append(Americas)
df = df.append(Global)
df = pd.merge(df,
IP_weights,
left_on = ['Date','Country'],
right_on =['Date','Country'],
how='left')
df_1 = df
df_1 = df_1.reset_index()
df_1[["Weight"]] = df_1[["Weight"]].apply(pd.to_numeric)
df_1.head()
df_1['Date'] = df_1['Date'].dt.strftime('%Y-%m-%d')
df_1 = df_1.dropna()
df_1["Region"] = "Asia"
df_1.loc[df_1['Country'] == 'EA', 'Region'] = "Europe"
df_1.loc[df_1['Country'] == 'UK', 'Region'] = "Europe"
df_1.loc[df_1['Country'] == 'Poland', 'Region'] = "Europe"
df_1.loc[df_1['Country'] == 'US', 'Region'] = "Americas"
df_1.loc[df_1['Country'] == 'Brazil', 'Region'] = "Americas"
df_1.loc[df_1['Country'] == 'Mexico', 'Region'] = "Americas"
df_1.loc[df_1['Country'] == 'Europe', 'Region'] = "Europe"
df_1.loc[df_1['Country'] == 'Americas', 'Region'] = "Americas"
df_1.loc[df_1['Country'] == 'Global', 'Region'] = "Global"
df_1["Weighted_OG"] = df_1["Residual"]*df_1["Weight"]
df_1["Weighted_Mom"] = df_1["Momentum"]*df_1["Weight"]
df_2 = pd.DataFrame(df_1["Weighted_OG"].groupby(df_1["Date"]).agg(np.std, ddof=0))
df_2["Weighted_Mom"] = pd.DataFrame(df_1["Weighted_Mom"].groupby(df_1["Date"]).agg(np.std, ddof=0))
df_2["Variance"] = (df_2["Weighted_Mom"]+df_2["Weighted_OG"])/2
df_2 = pd.DataFrame(df_2["Variance"])*20
df_3 = df_1.loc[df_1['Country'] == "Global"]
df_4 = pd.merge(df_2,
df_3,
left_on = ['Date'],
right_on =['Date'],
how='left')
Long_IP= pd.read_excel("Long_IP.xlsx",parse_dates=True)
Long_IP = Long_IP.set_index('Date')
IP_Global_Long_Deets, IP_Global_Long = your_function(Long_IP.IP)
Long_Global = cells(IP_Global_Long, "Global_Output_Gap", "Global_Momentum")
Long_Global = Long_Global.reset_index()
import plotly.express as px
px.scatter(df_1, x="Output_Gap", y="Momentum", animation_frame="Date", animation_group="Country", size="Weight", color_discrete_sequence=["red", "green", "blue", "yellow"],
hover_name="Country",color="Region",range_x=[-6,6], range_y=[-6,6])
px.scatter(df_4, x="Output_Gap", y="Momentum", animation_frame="Date", color_discrete_sequence=["red"],size="Variance",
range_x=[-4,4], range_y=[-4,4])
#px.scatter(Long_Global, x="Output_Gap", y="Momentum", animation_frame="Date", color_discrete_sequence=["blue"],
#range_x=[-4,4], range_y=[-4,4])